package cn.b.sky.mes.pp.dao;

import java.util.Date;
import java.util.List;
import java.util.Set;

import cn.b.sky.mes.pp.model.OperationTask;
import cn.b.sky.mes.pp.model.condition.OperationTaskCondition;
import org.apache.ibatis.annotations.Param;

/**
 * 
 * <strong>Title : OperationTaskDao.java<br></strong>
 * <strong>Package : cn.b.sky.mes.pp.dao<br></strong>
 * <strong>Description : </strong>工序任务单数据接口<br> 
 * <strong>Create on : 2016年7月29日 下午1:22:23<br></strong>
 * <p>
 * @author zhaoxin01<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 * <strong>修改历史:</strong><br>
 * 修改人|修改日期|修改描述<br>
 * -------------------------------------------<br>
 * <br>
 * <br>
 */
public interface OperationTaskDao {

  /**
   * 
   * <strong>Title : deleteOperationTaskByProductionControl<br></strong>
   * <strong>Description : </strong>删除生产管理号下所有工序任务单<br> 
   * <strong>Create on : 2016年7月29日 下午1:35:08<br></strong>
   * <p>
   * @param siteCode
   * @param productionControlNum
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void deleteOperationTaskByProductionControl(@Param("siteCode") String siteCode,
      @Param("productionControlNum") String productionControlNum);

  /**
   * 
   * <strong>Title : updateOperationTaskCloseByProductionControl<br></strong>
   * <strong>Description : </strong>修改生产管理号下的工序任务单<br> 
   * <strong>Create on : 2016年7月29日 下午1:44:53<br></strong>
   * <p>
   * @param siteCode 工厂
   * @param productionControlNum 生产管理号
   * @param statusECode 修改后状态
   * @param statusSet 修改前排除状态集合
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void updateOperationTaskCloseByProductionControl(OperationTask operationTask);

  /**
   * 
   * <strong>Title : selectCanClosedOperationTaskByProductOrder<br></strong>
   * <strong>Description : </strong>查询产品订单下面可以关闭的工序任务<br> 
   * <strong>Create on : 2016-8-2 下午2:48:27<br></strong>
   * <p>
   * @param task
   * @return
   * List<OperationTask>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<OperationTask> selectCanClosedOperationTaskByProductOrder(OperationTask task);

  /**
   * 
   * <strong>Title : closeOperationTaskByProductOrder<br></strong>
   * <strong>Description : </strong>关闭产品订单下面的工序任务<br> 
   * <strong>Create on : 2016-8-2 下午2:48:54<br></strong>
   * <p>
   * @param task
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void closeOperationTaskByProductOrder(OperationTask task);

  /**
   * 
   * <strong>Title : selectCanClosedOperationTaskByProductionOrder<br></strong>
   * <strong>Description : </strong>查询生产订单下面的可以关闭的工序任务<br> 
   * <strong>Create on : 2016-8-2 下午2:50:17<br></strong>
   * <p>
   * @param task
   * @return
   * List<OperationTask>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<OperationTask> selectCanClosedOperationTaskByProductionOrder(OperationTask task);

  /**
   * 
   * <strong>Title : closeOperationTaskByProductionOrder<br></strong>
   * <strong>Description : </strong>关闭生产订单下面的可以关闭的工序任务<br> 
   * <strong>Create on : 2016-8-2 下午2:50:45<br></strong>
   * <p>
   * @param task
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void closeOperationTaskByProductionOrder(OperationTask task);

  /**
   * 
   * <strong>Title : getOperationTaskByCondition<br></strong>
   * <strong>Description : </strong>根据条件查询工序单<br> 
   * <strong>Create on : 2016-8-2 下午1:57:46<br></strong>
   * <p>
   * @param condition
   * @return
   * List<OperationTask>
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<OperationTask> getOperationTaskByCondition(OperationTaskCondition condition);

  /**
   * 
   * <strong>Title : getOperationTaskCountByCondition<br></strong>
   * <strong>Description : </strong>根据条件查询工序单总数<br> 
   * <strong>Create on : 2016-8-2 下午1:58:21<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int getOperationTaskCountByCondition(OperationTaskCondition condition);

  /**
   * 
   * <strong>Title : operationTaskDao<br></strong>
   * <strong>Description : </strong>根据工序单号查询工序任务单信息<br> 
   * <strong>Create on : 2016-8-3 下午3:31:55<br></strong>
   * <p>
   * @param operationTaskNum
   * @return
   * OperationTask
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public OperationTask getoperationTask(@Param("siteCode") String siteCode,
      @Param("operationTaskNum") String operationTaskNum);

  /**
   * 
   * <strong>Title : productionControlForOperationTaskCount<br></strong>
   * <strong>Description : </strong>检查生产管理号下所有工序任务单关闭与完工状态下记录条数<br> 
   * <strong>Create on : 2016-8-4 下午3:11:00<br></strong>
   * <p>
   * @param siteCode 工厂ID
   * @param productionControlNum 生产管理号
   * @param statusECode1 完工状态
   * @param statusECode2 关闭状态
   * @return
   * int
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int productionControlForOperationTaskCount(@Param("siteCode") String siteCode,
      @Param("productionControlNum") String productionControlNum, @Param("statusECode1") String statusECode1,
      @Param("statusECode2") String statusECode2);

  /**
   * 
   * <strong>Title : updateOperationTaskStatus<br></strong>
   * <strong>Description : </strong>修改工序任务单状态<br> 
   * <strong>Create on : 2016-8-4 下午3:37:31<br></strong>
   * <p>
   * @param siteCode 工厂
   * @param operationTaskNum 工序任务单编号
   * @param statusECode 状态
   * void
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void updateOperationTaskStatus(@Param("siteCode") String siteCode, @Param("operationTaskNum") String operationTaskNum,
      @Param("statusECode") String statusECode, @Param("modifyDateTime") Date modifyDateTime,
      @Param("modifyUser") String modifyUser);

  /**
   * 
   * <strong>Title : getOperationTaskProgressByCondition<br></strong>
   * <strong>Description : </strong>工作任务单进度查询<br> 
   * <strong>Create on : 2016-8-8 下午4:22:07<br></strong>
   * <p>
   * @param condition
   * @return
   * List<OperationTask>
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<OperationTask> getOperationTaskProgressByCondition(OperationTaskCondition condition);

  /**
   * 
   * <strong>Title : getOperationTaskProgressCountByCondition<br></strong>
   * <strong>Description : </strong>工作任务单进度查询总数<br> 
   * <strong>Create on : 2016-8-8 下午4:23:50<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public int getOperationTaskProgressCountByCondition(OperationTaskCondition condition);

  /**
   * 
   * <strong>Title : updateOperationTaskForConfirm<br></strong>
   * <strong>Description : </strong>报工更新工序任务单<br> 
   * <strong>Create on : 2016年8月10日 上午11:10:00<br></strong>
   * <p>
   * @param operationTask
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void updateOperationTaskForConfirm(OperationTask operationTask);

  /**
   * 
   * <strong>Title : getOperationArrangePlanByCondition<br></strong>
   * <strong>Description : </strong>工序排产计划查询<br> 
   * <strong>Create on : 2016-8-10 上午9:26:52<br></strong>
   * <p>
   * @param condition
   * @return
   * List<OperationTask>
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<OperationTask> getOperationArrangePlanByCondition(OperationTaskCondition condition);

  /**
   * 
   * <strong>Title : getOperationArrangePlanCountByCondition<br></strong>
   * <strong>Description : </strong>工序排产计划查询记录数<br> 
   * <strong>Create on : 2016-8-10 上午9:28:58<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int getOperationArrangePlanCountByCondition(OperationTaskCondition condition);

  /**
   * 
   * <strong>Title : insetOperationTask<br></strong>
   * <strong>Description : </strong>新建工序任务单<br> 
   * <strong>Create on : 2016年8月16日 上午10:38:03<br></strong>
   * <p>
   * @param operationTask
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insetOperationTask(OperationTask operationTask);

  /**
   * 
   * <strong>Title : updateOperationTask<br></strong>
   * <strong>Description : </strong>更新工序任务单<br> 
   * <strong>Create on : 2016年8月16日 上午10:38:19<br></strong>
   * <p>
   * @param operationTask
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void updateOperationTask(OperationTask operationTask);

  /**
   * 
   * <strong>Title : deleteOperationTask<br></strong>
   * <strong>Description : </strong>删除工序任务单<br> 
   * <strong>Create on : 2016年8月16日 上午10:38:34<br></strong>
   * <p>
   * @param siteCode
   * @param operationTaskNum
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void deleteOperationTask(@Param("siteCode") String siteCode, @Param("operationTaskNum") String operationTaskNum);

  /**
   * 
   * <strong>Title : getMinStartDateByOrderNums<br></strong>
   * <strong>Description : </strong>获取订单下的工序任务单的最小排产开始时间<br> 
   * <strong>Create on : 2016年8月19日 上午9:53:13<br></strong>
   * <p>
   * @param siteCode
   * @param orderNums
   * @return
   * Date
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Date getMinStartDateByOrderNums(@Param("siteCode") String siteCode, @Param("orderNums") String[] orderNums);

  /**
   * 
   * <strong>Title : getMaxEndDateByOrderNums<br></strong>
   * <strong>Description : </strong>获取订单下的工序任务单的最大排产结束时间<br> 
   * <strong>Create on : 2016年8月22日 下午1:43:12<br></strong>
   * <p>
   * @param siteCode
   * @param orderNums
   * @return
   * Date
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public Date getMaxEndDateByOrderNums(@Param("siteCode") String siteCode, @Param("orderNums") String[] orderNums);

  /**
   * 
   * <strong>Title : getOperationTasksByControlNums<br></strong>
   * <strong>Description : </strong>根据生产管理号查询工序任务单<br> 
   * <strong>Create on : 2016年8月19日 上午9:38:33<br></strong>
   * <p>
   * @param siteCode
   * @param controlNums
   * @return
   * List<OperationTask>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<OperationTask> getOperationTasksByControlNums(@Param("siteCode") String siteCode,
      @Param("controlNums") String[] controlNums);

  /**
   * 
   * <strong>Title : getControlNumsByWorkUnitCodes<br></strong>
   * <strong>Description : </strong>查询时间范围内作业单元上的工序任务单对应的管理号<订单号;管理号><br> 
   * <strong>Create on : 2016年11月15日 下午4:46:42<br></strong>
   * <p>
   * @param siteCode
   * @param workUnitCodeSet
   * @param startDate
   * @param endDate
   * @return
   * Set<String>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Set<String> getControlNumsByWorkUnitCodes(@Param("siteCode") String siteCode,
      @Param("workUnitCodeSet") Set<String> workUnitCodeSet, @Param("startDate") String startDate,
      @Param("endDate") String endDate);

}
